package com.jhy.szl.daima20240918;

/**
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起, 每计数至 2k 个字符，就反转这 2k 个字符中的前 k 个字符。
 * <p>
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * <p>
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 * 示例:
 * 输入: s = "abcdefg", k = 2
 * 输出: "bacdfeg
 */
public class ReverseStr {
    public String reverseStr(String s, int k) {
        char[] chars = s.toCharArray();

        // 每次跳转2k 步长为2k
        for (int i = 0; i < chars.length; i += 2 * k) {
            if (i + k <= chars.length) {
                swap(chars, i, i + k - 1);
                continue;
            }
            swap(chars, i, chars.length - 1);
        }
        return new String(chars);
    }

    /**
     * 反转函数
     *
     * @param chars
     * @param start
     * @param end
     */
    public void swap(char[] chars, int start, int end) {
        while (start < end) {
            char temp = chars[start];
            chars[start] = chars[end];
            chars[end] = temp;
            start++;
            end--;
        }
    }
}
